3、使用Image
这一章,我们将介绍如何添加Image到View中。
Getting ready
新建一个SwiftUI工程,叫做ImageApp
How to do it…
首先让我们添加一些图片到Assert中,然后我们再介绍一些modifier来修改图片样式。
- 替换Text为VStack
- 从https://github.com/PacktPublishing/SwiftUI-Cookbook-2nd-Edition/tree/main/Resources/Chapter01/recipe3下载图片
- 拖动图片到Asserts中
- 添加一个
Image
到VStack中
Image("dogs1")
- 添加一个
.resizable()
modifier, 他能让SwiftUI调整图片大小以适应可以用空间。
Image("dogs1")
.resizable()
- 我们看到图片被压缩了,继续添加一个
.aspectRatio
Image("dogs1")
.resizable()
.aspectRatio(contentMode: .fit)
- 继续添加 dog-and-nature到
VStack
中
Image("dog-and-nature")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width:300, height:200)
.clipShape(Circle())
.overlay(Circle().stroke(Color.blue, lineWidth: 6))
.shadow(radius: 10)
- 我们写个工具方法来获取UIImage
func getImageFromUIImage(image:String) -> UIImage {
guard let img = UIImage(named: image) else {
fatalError("Unable to load image")
}
return img
}
- 然后使用UIImage来加载图片
Image(uiImage: getImageFromUIImage(image:"dog2"))
.resizable()
.frame(width: 200, height: 200)
.aspectRatio(contentMode: .fit)
- 最终效果
How it works…
添加Image
到View上时,Image
默认显示原始尺寸。图片可能大了,也可能小了。
要让Image
适应屏幕大小,我们需要添加.resizable
modifier。这会让Image
缩放以占满可用空间。
为了解决缩放的拉伸问题,我们可以使用.aspectRatio
modifier。
如果我们要限制图片大小固定为某个值,可以使用.frame
modifier。
如果想裁剪图片为某个形状,可以使用.clipShape
modifier。
我们还可以使用.overlay
和.shadow
来添加边框和阴影。
注意modifer的顺序比较重要,不同顺序的组合可能得到不一样的结果。